package com.lxt.config;

import com.lxt.common.util.DateUtil;
import com.lxt.service.OrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

/**
 * @author kevin.lv
 * @date 2022/8/1 20:10
 */
@Component
public class OrderJob {

    @Autowired
    private OrderService orderService;

    /**
     * 使用定时任务关闭超期未支付订单，会存在的弊端：
     * 1.会有时间差,程序不严谨
     *      10:39下单，11:00检查不足一小时，12:00检查，超过1小时多余39分钟
     * 2.不支持集群
     *      单机没问题，使用集群后就会有多个定时任务
     *      解决方案：只使用一台计算机节点，单独用来运行所有的定时任务
     * 3.会对数据库全表搜索，极其影响数据库性能 : select * from order where orderStatus = 10;
     * 定时任务，仅仅适用于小型轻量级项目，传统项目
     *
     * 互联网电商项目使用消息队列：MQ-> RabbitMQ,RocketMQ,Kafka等
     *      延时任务(队列)
     *      10:12分下单,未付款(10)状态,11:12分检查,如果当前状态还是10,则直接关闭订单即可
     */

    @Scheduled(cron = "0 0 0/1 * * ? ")
    public void autoCloseOrder() {
        orderService.closeOrder();
        System.out.println("执行定时任务，当前时间为:" +
                DateUtil.getCurrentDateString(DateUtil.DATETIME_PATTERN));

    }
}
